function RangeValidate(min: number, max: number) {
  return function (target: object, propertyKey: string, descriptor: PropertyDescriptor) {
    // 保存原始的 setter
    const originalSetter = descriptor.set
    // 重写 setter
    descriptor.set = function (value) {
      // 检查设置的值是否在指定的最小值和最大值之间
      if (value < min || value > max) {
        // 如果值不在范围内, 抛出错误
        throw new Error(`${propertyKey} 的值应该在 ${min} 到 ${max} 之间！`)
      }

      // 如果值在范围内，且原始 setter 方法存在，则调用原始 setter 方法
      if (originalSetter) {
        originalSetter.call(this, value)
        // originalSetter.apply(this, value)
      }
    }
  }
}

class Weather {
  constructor(private _temp: number) { }

  // 设置温度范围在 -50 到 50 之间
  @RangeValidate(-50, 50)
  set temp(value) {
    this._temp = value
  }
  get temp() {
    return this._temp
  }
}

const w1 = new Weather(28)
console.log(w1.temp)
w1.temp = 9000  // Uncaught Error: temp 的值应该在 -50 到 50 之间！
console.log(w1.temp)
